Sensor networks have been widely used to monitor physical or environmental conditions across a geographical area. Typically, sensors (or sensor nodes) in a sensor network collect and store data so the data can subsequently be accessed. In this way, the sensor network can be viewed as a distributed database. An important requirement of a sensor network is that data collected by sensors in the network can be disseminated to end users.
One approach for retrieving data in a sensor network is for a user to query an individual sensor or a group of sensors for data collected by the sensor(s). The desired data can then be routed across the network from the sensor(s) to the user. However, sensors in a sensor network typically have very limited storage, bandwidth and/or computational power, and are often prone to failure, especially in situations where a sensor network is used to monitor emergency or disaster scenarios, such as floods, fires, earthquakes, and/or landslides. Due to these limitations, the foregoing approach may be infeasible or may incur unacceptable delay for certain applications.
Another approach is to use local data storage units (or data sinks) to collect data. A data storage unit can typically store a relatively large quantity of data collected by nearby sensors, and may respond directly to a querying node. A local data storage unit can be used to collect sensor data more effectively. However, in failure-prone sensor networks, valuable data that is collected by the sensors may still be lost before reaching a data storage unit. Therefore, it is desirable to efficiently collect and recover data in a failure-prone sensor network.